# 类综合练习
# 练习:
# 1
# 创建一个学生类
# 添加 学习、睡觉、打篮球
# 的方法
# 创建张三、李四对象
# 执行方法

#a. 创建一个类
# class student():
#     def study(self):
#         print(self.name+'：学习')
#     def work(self):
#         print(self.name+'：工作')
#     def playbasketball(self):
#         print(self.name+'：打篮球')
# b.创建对象
# student1 = student()
# student1.name = '张三'
# student2 = student()
# student2.name = '李四'
# c.执行方法
# student1.study()
# student1.work()
# student1.playbasketball()
# student2.study()
# student2.work()
# student2.playbasketball()



# 2
# 创建一个汽车类
# 属性 品牌 型号
# 添加方法 驾驶
# 创建汽车对象
# 并执行方法
# a.创建类
# class Car():
#     def attribute(self):
#         print(self.name+'品牌为：BMW'+'  '+'型号为：SUV')
#     def drive(self):
#         print(self.name+'正在驾驶')
#         print()
# b.创建汽车对象
# car1 = Car()
# car1.name = '新车'
# car2 = Car()
# car2.name = '旧车'
# c. 执行方法
# car1.attribute()
# car1.drive()
# car2.attribute()
# car2.drive()




# 3
# 定义一个圆的类
# 属性 半径
# 方法 求圆面积
# import math
#                                     # 个人理解 这里的类 相当于一个模板 缺少的是具体的对象（等价于：类是一个大的函数，而自变量是具体对象）
# a.创建类                                   # 同时 类中定义的具体函数，所需要的就是 具体对象的具体参数
# class Circular():
#     def attribute(self):
#         print(self.r + '圆的半径为：')
#     def area(self):
#         s = 3.14 * self.r *self.r
#         return s                    #  注意：如定义的函数为一个计算过程即能到一个明确的结果，则需要写返回值
#     def zhouchang(self):
#         l = math.pi * self.r * 2
# b.创建对象                          # 创建对象，就是要说明这个变量在类这个函数的定义域内
# c1 =Circular()     # 定义对象c1的类
# c1.r = 10          # 定义对象c1的一个属性（半径r）            # 这里相当于 给出具体变量的具体参数
#
# c.执行
# print(c1.area())   # 执行操作时，可以以 具体对象名.调用类中的操作名     # 在根据具体对象来实行类中的具体函数时 可以通过具体对象。类中的具体函数 来实现类中函数的带哦用


# 4. 给学生类添加 __init__ 和 __str__ 并测试
# a. 创建一个类
# class Student():
#     def __init__(self):
#         self.name = '加百列'
#     def __str__(self):
#         return f'{self.name}'
# b.创建对象
# student3 = Student()         # 注意 类后面要添加（）

# c.执行方法
# print(student3)

# 5. 给汽车类添加 __init__ 和 __str__ 并测试
# a.创建类
# class Car():
#     def __init__(self):
#         self.name = '布加迪'
#         self.leixing = '商务越野'
#     def __str__(self):
#         return f'汽车品牌名：{self.name}  汽车类型名：{self.leixing}'
# b.创建汽车对象
# car1 = Car()
# c. 执行方法
# print(car1)

# 6. 定义一个Point类 点类 用一下代码测试
# p1 = Point(2.0,3.5)
# print(p1) # 打印输出 (2.0,3.5)
# p1 = Point(5.0,10.0)
# print(p1) # 打印输出 (5.0,10.0)
# class Point():
#     def __init__(self):                 # 定义初始点的坐标
#         self.x = 0
#         self.y = 0
#     def print(self):                    # 打印给定点的两个数据
#         print(f'({self.x},{self.y})')
#     def __str__(self):                      # 直接打印含参类
#         return f'({self.x},{self.y})'

# p1 = Point()    # 定义一个初始默认点 直接打印
# print(p1)

# p1 = Point()
# p1.x = 3
# p1.y = 4
# print(p1)       # 注意这两种对应的输出分别是 默认输出 和 指定调用输出
# p1.print()

# 7. 定义一个Fraction类 分数类
# f1 = Fraction(1,2)
# print(f1) # 打印输出1/2
# f2 = Fraction(1,3)
# print(f2) # 打印输出1/3
# class Fraction():
#     def __init__(self):                 # 定义初始点的坐标
#         self.x = 0
#         self.y = 1
#     def print(self):                    # 打印给定点的两个数据
#         print(f'{self.x}/{self.y}')
#     def __str__(self):                      # 直接打印含参类
#         return f'{self.x}/{self.y}'

# f1 = Fraction()
# f1.x = 2
# f1.y = 3
#
# print(f1)                 # 加深理解 前者是通过返回函数来调用 后者是 通过调用print函数
# f1.print()                # 两者的实现输出相同，但是实现的流程不相同


# 8. 定义一个Date类 并使用一下代码测试
# d1 = Date(2021,5,12)
# print(d1) # 打印输出 2021-5-12
# print(d1.isLeapYer()) # 打印输出这一年是否是闰年 false
# print(d1.getMonthDay()) # 打印输出这个月有几天 31
# print(d1.getDayInyear()) # 打印输出这一天是这一年的第几天
# class Data():
#     def __init__(self):                       # self 是指调用者 （相当于是对象  具体的自变量）
#         self.year = 1900
#         self.mouth = 1
#         self.day = 1
#     def isLeapyear(self):
#         if self.year%100==0:
#             if self.year%400==0:
#                 print("这一年是否是闰年：true")
#             else:
#                 print("这一年是否是闰年：false")
#         elif self.year%4==0:
#             print("这一年是否是闰年：true")
#         else:
#             print("这一年是否是闰年：false")
#     def getMonthday(self):
#         days = [31,28,31,30,31,30,31,31,30,31,30,31]
#         print(f'本月共有：{days[self.mouth-1]}天')
#     def getDayInyear(self):
#         days = [31,28,31,30,31,30,31,31,30,31,30,31]
#         sumday1 = 0
#         for i in range(1,d1.mouth):
#             sumday1 += days[i-1]
#         sunday2 = sumday1 + d1.day
#         print(f"您输入的日期是这一年的第：{sunday2}天")
#
# d1 = Data()
# d1.year = 2000
# d1.mouth = 2
# d1.day = 15
#
# d1.isLeapyear()
# d1.getMonthday()
# d1.getDayInyear()

# 9. 定义一个学生类
# 属性: 学号 姓名 语数外成绩
# 方法:
#      __str__() 打印输出用户成绩信息
#      sum() 得到三门课总分
#      avg() 得到三门课平均分
#      max() 三门课最高分
#      min() 三门课最低分

# class Student():
#     def __init__(self):
#         self.number = '0000'
#         self.name = 'xxx'
#         self.chinesemark = '000'
#         self.mathmark = '000'
#         self.englishmark = '000'
#     def sum(self):
#         print(f'三门课的总分为：{int(self.chinesemark)+int(self.mathmark)+int(self.englishmark)}')
#     def avg(self):
#         print(f'三门课的平均分为：{(int(self.chinesemark) + int(self.mathmark) + int(self.englishmark))/3}')
#     def max(self):
#         x = 0
#         if self.chinesemark > self.mathmark:
#             x = self.chinesemark
#             if self.chinesemark > self.englishmark:
#                 x = self.chinesemark
#             else:
#                 x = self.englishmark
#         elif self.mathmark > self.englishmark:
#             x = self.mathmark
#         else:
#             x = self.englishmark
#         print(f'三门课中最高分为：{x}')
#     def min(self):
#         x = 0
#         if self.chinesemark < self.mathmark:
#             x = self.chinesemark
#             if self.chinesemark < self.englishmark:
#                 x = self.chinesemark
#             else:
#                 x = self.englishmark
#         elif self.mathmark < self.englishmark:
#             x = self.mathmark
#         else:
#             x = self.englishmark
#         print(f'三门课中最低分为：{x}')
#     def __str__(self):
#         return f'学生学号：{self.number}、学生姓名：{self.name}、学生语文成绩：{self.chinesemark}、学生数学成绩：{self.mathmark}、学生英语成绩：{self.englishmark}'
#
# student1 = Student()
# student1.number = '1001'
# student1.name = '张三'
# student1.chinesemark = 60
# student1.mathmark = 70
# student1.englishmark = 80
#
#
# student1.sum()
# student1.avg()
# student1.max()
# student1.min()
# print(student1)








# class Student():
#     def __init__(self):
#         self.number = '0000'
#         self.name = 'xxx'
#         self.chinesemark = '000'
#         self.mathmark = '000'
#         self.englishmark = '000'
#     def sum(self):
#         print(f'三门课的总分为：{int(self.chinesemark)+int(self.mathmark)+int(self.englishmark)}')
#     def avg(self):
#         print(f'三门课的平均分为：{(int(self.chinesemark) + int(self.mathmark) + int(self.englishmark))/3}')
#     def max(self):
#         x = 0
#         if self.chinesemark > self.mathmark:
#             x = self.chinesemark
#             if self.chinesemark > self.englishmark:
#                 x = self.chinesemark
#             else:
#                 x = self.englishmark
#         elif self.mathmark > self.englishmark:
#             x = self.mathmark
#         else:
#             x = self.englishmark
#         print(f'三门课中最高分为：{x}')
#     def min(self):
#         x = 0
#         if self.chinesemark < self.mathmark:
#             x = self.chinesemark
#             if self.chinesemark < self.englishmark:
#                 x = self.chinesemark
#             else:
#                 x = self.englishmark
#         elif self.mathmark < self.englishmark:
#             x = self.mathmark
#         else:
#             x = self.englishmark
#         print(f'三门课中最低分为：{x}')
#     def __str__(self):
#         return f'学生学号：{self.number}、学生姓名：{self.name}、学生语文成绩：{self.chinesemark}、学生数学成绩：{self.mathmark}、学生英语成绩：{self.englishmark}'
#
#
# student1 = Student()
# student1.number = '1001'
# student1.name = '张三'
# student1.chinesemark = 60
# student1.mathmark = 70
# student1.englishmark = 80
#
#
# student1.sum()
# student1.avg()
# student1.max()
# student1.min()
# print(student1)


# 10 设计一个银行卡类
#  属性: 卡号 姓名 余额
# 方法:
#      存钱
#      取钱
# class Bankcard():
#     def savemoney(self):
#         print('存钱')
#     def withdrowmoney(self):
#         print('取钱')
#     def __str__(self):
#         return f'银行卡卡号：{self.number}，持卡人姓名：{self.name}，卡内余额：{self.balance}元'
#
# b1 = Bankcard()
# b1.number = 123456789
# b1.name = '张三'
# b1.balance = 465
#
# b1.savemoney()
# b1.withdrowmoney()
# print(b1)






